package slotmachine;

import javax.swing.JOptionPane;

public class Partita {

    private Rullo rullo;
    private Rullo rulloI;
    private Rullo rulloII;

    public Partita() {
        this.rullo = new Rullo();
        this.rulloI = new Rullo();
        this.rulloII = new Rullo();
    }

    public void start() {

        String nome = JOptionPane.showInputDialog("Inserire nome giocatore");
        while (nome.isEmpty()) {
            nome = JOptionPane.showInputDialog("Inserire nome giocatore");
        }
        String[] inizia = {"Inizia a giocare", "Regolamento"};
        int regolamento = 1;
        while (regolamento == 1) {
            regolamento = JOptionPane.showOptionDialog(null, "Ciao " + nome + ", benvenuto al casinò! Questa è una slot machine.", "Inizia", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, inizia, inizia[0]);
            if (regolamento == 1) {
                JOptionPane.showMessageDialog(null, "Una volta inserita una fiches (variano da 25 a 1000 €) all'interno della slot, si può vedere l'elenco delle combinazioni vincenti\ne la combinazione attuale. E' possibile bloccare uno o più rulli per mantenere lo stesso simbolo anche dopo aver tirato la leva.\nUna volta deciso quali rulli bloccare basta tirare la leva per sapere se e quanto si è vinto.\nIn qualsiasi momento è possibile uscire dal casinò e portare a casa i soldi.");
            }
        }

        String[] scelte = new String[4];
        String[] possibleBet = new String[7];
        int money = 500;
        int finire = 1;
        int sceltaPrec=0;
        while (money > 0 && finire != 0) {
            int rand = func.func.rand(100);
            int scelta = 0;
            if (rand < 50) {
                scelta = 1;
            } else if (rand < 70) {
                scelta = 2;
            } else if (rand < 85) {
                scelta = 3;
            } else if (rand < 95) {
                scelta = 4;
            } else if (rand < 100) {
                scelta = 5;
            }
            for (int i = 0; i < scelte.length; i++) {
                if (i == 0) {
                    scelte[i] = "Stop [1]";
                } else if (i == 1) {
                    scelte[i] = "Stop [2]";
                } else if (i == 2) {
                    scelte[i] = "Stop [3]";
                } else {
                    scelte[i] = "Tira la leva";
                }
            }
            rullo.setStopped(false);
            rulloI.setStopped(false);
            rulloII.setStopped(false);
            rullo.changeSimb(scelta);
            rulloI.changeSimb(scelta);
            rulloII.changeSimb(scelta);
            for (int i = 0; i < possibleBet.length; i++) {
                possibleBet[i] = "Non puoi puntare questa cifra";
            }
            int num = 0;
            for (int i = 0; i <= money; i++) {
                if (i == 25 || i == 50 || i == 100 || i == 200 || i == 300 || i == 500 || i == 1000) {
                    possibleBet[num] = i + "";
                    num++;
                }
            }
            Object puntata = JOptionPane.showInputDialog(null, "Quanto vuoi puntare?\nSoldi rimasti: " + money + " €", "Bet", JOptionPane.QUESTION_MESSAGE, null, possibleBet, possibleBet[sceltaPrec]);
            while (puntata.equals("Non puoi puntare questa cifra")) {
                puntata = JOptionPane.showInputDialog(null, "Quanto vuoi puntare?\nSoldi rimasti: " + money + " €", "Bet", JOptionPane.QUESTION_MESSAGE, null, possibleBet, possibleBet[sceltaPrec]);
            }
            for(int i=0; i<possibleBet.length; i++){
                if(puntata.equals(possibleBet[i])){
                    sceltaPrec=i;
                }
            }
            int bet = Integer.parseInt(puntata.toString());
            money = money - bet;
            String tabellone = "<html><table><tr><td><font size=4>ᐁᐁᐁ x2</font></td><td><font size=4>@@@ x25</font></td></tr><tr><td><font size=4>??? x4</font></td><td><font size=4>XXX x30</font></td></tr><tr><td><font size=4>§§§ x10</font></td><td><font size=4>°°° x35</font></td></tr><tr><td><font size=4>ççç x15</font></td><td><font size=4>$$$ x50</font></td></tr><tr><td><font size=4>^^^ x20</font></td><td><font size=4>777 x75</font></td></tr></table></html>";
            String rulli = "<html><font size=13 color=\"blue\">|" + rullo.getSimb() + "|            |" + rulloI.getSimb() + "|                 |" + rulloII.getSimb() + "|</font></html>";
            int scegli = JOptionPane.showOptionDialog(null, "---\n" + tabellone + "\n---\n" + rulli, "Slot Machine", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, scelte, scelte[3]);
            if (scegli == 0) {
                this.rullo.setStopped(true);
                scelte[0] = "Start [1]";
            }
            if (scegli == 1) {
                this.rulloI.setStopped(true);
                scelte[1] = "Start [2]";
            }
            if (scegli == 2) {
                this.rulloII.setStopped(true);
                scelte[2] = "Start [3]";
            }
            while (scegli != 3) {
                scegli = JOptionPane.showOptionDialog(null, "---\n" + tabellone + "\n---\n" + rulli, "Slot Machine", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, scelte, scelte[3]);
                if (scegli == 0) {
                    if (scelte[0].equals("Start [1]")) {
                        this.rullo.setStopped(false);

                        scelte[0] = "Stop [1]";


                    } else {
                        this.rullo.setStopped(true);
                        scelte[0] = "Start [1]";
                    }
                } else if (scegli == 1) {
                    if (scelte[1].equals("Start [2]")) {
                        this.rulloI.setStopped(false);
                        scelte[1] = "Stop [2]";
                    } else {
                        this.rulloI.setStopped(true);
                        scelte[1] = "Start [2]";
                    }
                } else if (scegli == 2) {
                    if (scelte[2].equals("Start [3]")) {
                        this.rulloII.setStopped(false);
                        scelte[2] = "Stop [3]";
                    } else {
                        this.rulloII.setStopped(true);
                        scelte[2] = "Start [3]";
                    }
                }
            }
            if (!this.rullo.isStopped()) {
                this.rullo.changeSimb(scelta);
            }
            if (!this.rulloI.isStopped()) {
                this.rulloI.changeSimb(scelta);
            }
            if (!this.rulloII.isStopped()) {
                this.rulloII.changeSimb(scelta);
            }
            rulli = "<html><font size=13 color=\"blue\">|" + rullo.getSimb() + "|            |" + rulloI.getSimb() + "|                 |" + rulloII.getSimb() + "|</font></html>";
            int vinti = 0;
            if (this.rullo.equals(this.rulloI) && this.rulloI.equals(this.rulloII)) {
                if (this.rullo.getSimb() == 'ᐁ') {
                    vinti = bet * 2;
                }
                if (this.rullo.getSimb() == '?') {
                    vinti = bet * 4;
                }
                if (this.rullo.getSimb() == '§') {
                    vinti = bet * 10;
                }
                if (this.rullo.getSimb() == 'ç') {
                    vinti = bet * 15;
                }
                if (this.rullo.getSimb() == '^') {
                    vinti = bet * 20;
                }
                if (this.rullo.getSimb() == '@') {
                    vinti = bet * 25;
                }
                if (this.rullo.getSimb() == 'X') {
                    vinti = bet * 30;
                }
                if (this.rullo.getSimb() == '°') {
                    vinti = bet * 35;
                }
                if (this.rullo.getSimb() == '$') {
                    vinti = bet * 50;
                }
                if (this.rullo.getSimb() == '7') {
                    vinti = bet * 75;
                }
            }
            money = money + vinti;
            JOptionPane.showMessageDialog(null, "---\n" + tabellone + "\n---\n" + rulli + "\nVincita: " + vinti + " €\nSoldi rimanenti: " + money + " €");
            if (money > 0) {
                finire = JOptionPane.showConfirmDialog(null, "Vuoi terminare le puntate e uscire dal casinò?");
            }
        }
        JOptionPane.showMessageDialog(null, nome + " sei uscito dal casinò con " + money + " €");
    }
}
